package com.lanou.renrenxin.tools;

import android.content.Context;
import android.util.Log;
import android.widget.Toast;

import com.bmob.BTPFileResponse;
import com.bmob.BmobPro;
import com.bmob.BmobProFile;
import com.bmob.btp.callback.DownloadListener;
import com.bmob.btp.callback.UploadListener;
import com.lanou.renrenxin.base.BaseApplication;
import com.lanou.renrenxin.mybomb.Friend;

import java.util.List;

import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.datatype.BmobFile;
import cn.bmob.v3.listener.DeleteListener;
import cn.bmob.v3.listener.FindListener;
import cn.bmob.v3.listener.GetListener;
import cn.bmob.v3.listener.SaveListener;
import cn.bmob.v3.listener.UpdateListener;

/**
 * Created by zouhui on 16/3/21.
 */
public class BmobUtils {
    private Context context;
    private String username;

    public BmobUtils(String username) {
        this.context = BaseApplication.getContext();
        this.username = username;
    }

    /**
     * 保存数据
     *
     * @param friend
     */
    public void saveFriend(Friend friend) {
        friend.save(context, new SaveListener() {
            @Override
            public void onSuccess() {
                Toast.makeText(context, "保存成功", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(int i, String s) {
                Toast.makeText(context, "保存失败", Toast.LENGTH_SHORT).show();
            }
        });
    }

    /**
     * 更新朋友数据
     *
     * @param friend
     */
    public void updateFriend(Friend friend) {
        friend.update(context, new UpdateListener() {
            @Override
            public void onSuccess() {
                Toast.makeText(context, "更新成功", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(int i, String s) {
                Toast.makeText(context, "更新失败", Toast.LENGTH_SHORT).show();
            }
        });
    }

    /**
     * 删除朋友
     *
     * @param friend
     */
    public void deleteFriend(Friend friend) {
        friend.delete(context, new DeleteListener() {
            @Override
            public void onSuccess() {
                Toast.makeText(context, "删除成功", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(int i, String s) {
                Toast.makeText(context, "删除失败", Toast.LENGTH_SHORT).show();
            }
        });
    }

    /**
     * 查询一个朋友
     *
     * @param qUsername 朋友ID
     */
    public void queryFriend(String qUsername) {
        BmobQuery<Friend> query = new BmobQuery<Friend>();
        query.getObject(context, qUsername, new GetListener<Friend>() {
            @Override
            public void onSuccess(Friend friend) {
                Toast.makeText(context, "查询成功", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(int i, String s) {
                Toast.makeText(context, "查询失败", Toast.LENGTH_SHORT).show();
            }
        });


    }

    /**
     * 查询五十名朋友
     */
    public void queryFriends() {
        BmobQuery<Friend> query = new BmobQuery<Friend>();
        query.addWhereEqualTo("mUsername", username);
        //查询playerName叫“比目”的数据
        query.addWhereEqualTo("playerName", "比目");
        //返回50条数据，如果不加上这条语句，默认返回10条数据
        query.setLimit(50);
        //执行查询方法
        query.findObjects(context, new FindListener<Friend>() {
            @Override
            public void onSuccess(List<Friend> list) {
                LogUtils.e("BmobUtils", "查询朋友们成功");
            }

            @Override
            public void onError(int i, String s) {
                LogUtils.e("BmobUtils", "查询朋友们失败");
            }
        });
    }

    /**
     * 上传文件
     *
     * @param filePath 文件路径
     */
    public void saveHeadImg(String filePath) {
        BTPFileResponse response = BmobProFile.getInstance(context).upload(filePath, new UploadListener() {

            @Override
            public void onSuccess(String fileName, String url, BmobFile file) {
                Log.e("bmob", "文件上传成功：" + fileName + ",可访问的文件地址：" + file.getUrl());
                // TODO Auto-generated method stub
                // fileName ：文件名（带后缀），这个文件名是唯一的，开发者需要记录下该文件名，方便后续下载或者进行缩略图的处理
                // url        ：文件地址
                // file        :BmobFile文件类型，`V3.4.1版本`开始提供，用于兼容新旧文件服务。
//                注：若上传的是图片，url地址并不能直接在浏览器查看（会出现404错误），需要经过`URL签名`得到真正的可访问的URL地址,当然，`V3.4.1`的版本可直接从'file.getUrl()'中获得可访问的文件地址。
            }

            @Override
            public void onProgress(int progress) {
                // TODO Auto-generated method stub
                Log.e("bmob", "onProgress :" + progress);
            }

            @Override
            public void onError(int statuscode, String errormsg) {
                // TODO Auto-generated method stub
                Log.i("bmob", "文件上传失败：" + errormsg);
            }
        });
    }


    /**
     * 下载文件
     *
     * @param fileName 文件名
     */
    public void downLoadHeadImg(String fileName) {
        BmobProFile.getInstance(context).download(fileName, new DownloadListener() {

            @Override
            public void onSuccess(String fullPath) {
                // TODO Auto-generated method stub
                Log.e("bmob", "下载成功：" + fullPath);
            }

            @Override
            public void onProgress(String localPath, int percent) {
                // TODO Auto-generated method stub
                Log.e("bmob", "download-->onProgress :" + percent);

            }

            @Override
            public void onError(int statuscode, String errormsg) {
                // TODO Auto-generated method stub
                Log.e("bmob", "下载出错：" + statuscode + "--" + errormsg);
            }
        });
    }


    /**
     * 得到文件路径
     *
     * @return
     */
    public String getFilePath() {
        return BmobPro.getInstance(context).getCacheDownloadDir();
    }

    public String getCacheSize() {
        //文件大小（单位：字节）
        String cacheSize = String.valueOf(BmobPro.getInstance(context).getCacheFileSize());
        //对文件大小进行格式化，转化为'B'、'K'、'M'、'G'等单位
        String formatSize = BmobPro.getInstance(context).getCacheFormatSize();
        return formatSize;
    }

    /**
     * 清除缓存
     */
    public void clearCache() {
        BmobPro.getInstance(context).clearCache();
    }

}
